package com.laity.single;

/**
 * @author: Laity
 * @Project: JavaLaity
 * @Package: com.laity.single.LazySingleton
 * @Date: 2023年11月20日 22:17
 * @Description: 懒汉式单例:在第一次调用时才创建实例，如果实例已经存在，则直接返回。
 * 单例中最重要的思想是 构造器私有化，别人就不能 new这个对象，保证内存中只有一个对象
 */

public class LazySingleton {

    private LazySingleton() {
        // 私有构造函数，防止外部直接实例化
        System.out.println(Thread.currentThread().getName() + "ok");
    }

    private static LazySingleton lazySingleton;

    public static LazySingleton getInstance() {
        if (lazySingleton == null) {
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }

    // 单线程下 确实单例OK
    // 多线程下不可以，每次结果都不一样
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(() -> LazySingleton.getInstance()).start();
        }
    }

}
